package cn.tedu.service;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class RibbonService {
    @Autowired
    RestTemplate template;

    /**
     * 引入服务降级的处理逻辑
     * @param name
     * @return
     */
    @HystrixCommand(fallbackMethod = "error")// 断路 或 故障 fallback回调方法，方法名称error，需要根据配置名称，在该类中实现一个同名同类型的函数
    public String sayHello(String name) {
        // 需要在业务层想办法调用service-hi的功能
        // 通过治理组件注册发现，可以直接调用service-hi
        String result = template.getForObject("http://service-hi/client/hello?name=" + name, String.class);
        // result = Hello, I am from 9001/9002
        return result;
    }

    /**
     * 服务降级的备用调用方法
     * @param name
     * @return
     */
    public String error(String name) {
        // 可以在这里编写备用逻辑，如 连接备用数据库，redis等
        return "error happened: " + name;
    }
}
